package spring.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

/**
 * Created by kassadin@foxmail.com on 2017/4/25 0025.
 */
@Configuration
@EnableWebMvc
@ComponentScan
public class WebConfig extends WebMvcConfigurerAdapter{
    /**
     * 没有配置视图解析器。如果这样的话， Spring默认会使
     * 用BeanNameView-Resolver，这个视图解析器会查找ID与视
     * 图名称匹配的bean，并且查找的bean要实现View接口，它以这样
     * 的方式来解析视图。
     * 没有启用组件扫描。这样的结果就是， Spring只能找到显式声明
     * 在配置类中的控制器。
     * 这样配置的话， DispatcherServlet会映射为应用的默认
     * Servlet，所以它会处理所有的请求，包括对静态资源的请求，如
     * 图片和样式表（在大多数情况下，这可能并不是你想要的效
     * 果）
     */

    /**
     * 配置jsp视图解析器
     * @return
     */
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    /**
     * 静态资源处理器
     */
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        super.configureDefaultServletHandling(configurer);
        configurer.enable();
    }
}
